/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package co.edu.senaclem.aspera.vista;

import co.edu.senaclem.logica.CoordinadorLogicaLocal;
import co.edu.senaclem.logica.PersonalLogicaLocal;
import co.edu.senaclem.logica.UsuariosLogicaLocal;
import co.edu.senaclem.modelo.Coordinador;
import co.edu.senaclem.modelo.Personal;
import java.io.IOException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.primefaces.component.commandbutton.CommandButton;
import org.primefaces.component.inputtext.InputText;
import org.primefaces.component.password.Password;
import org.primefaces.component.selectonemenu.SelectOneMenu;
import org.primefaces.event.SelectEvent;

/**
 *
 * @author FELIPE
 */
@ManagedBean(name = "coordinadorVista")
@RequestScoped
public class CoordinadorVista {

    @EJB
    private CoordinadorLogicaLocal coordinadorLogica;
    @EJB
    private PersonalLogicaLocal personalLogica;
    @EJB
    private UsuariosLogicaLocal usuariosLogica;
    
    private InputText txtDocumento;
    private InputText txtNombre;
    private InputText txtApellido;
    private InputText txtCorreo;
    private InputText txtTelefono;
    private SelectOneMenu cmbTipo;
    private Password passClave;
    private CommandButton btnCrear;
    private CommandButton btnModificar;
    private CommandButton btnEliminar;
    private CommandButton btnLimpiar;
    private List<Coordinador> listaCoordinadores = null;
    private Coordinador selectedCoordinador;

    public void onEliminacionConfirm(ActionEvent actionEvent) {
        eliminar_action();
    }

    public Coordinador getSelectedCoordinador() {
        return selectedCoordinador;
    }

    public void setSelectedCoordinador(Coordinador selectedCoordinador) {
        this.selectedCoordinador = selectedCoordinador;
    }

    public void onRowSelect(SelectEvent event) {
       // System.out.println("Listener Tabla");

        if (usuariosLogica.validarSesion()) {
            txtDocumento.setValue(((Coordinador) event.getObject()).getDocumento().getDocumento());
            txtNombre.setValue(((Coordinador) event.getObject()).getDocumento().getNombre().toUpperCase());
            txtApellido.setValue(((Coordinador) event.getObject()).getDocumento().getApellido().toUpperCase());
            txtCorreo.setValue(((Coordinador) event.getObject()).getDocumento().getCorreo().toUpperCase());
            txtTelefono.setValue(((Coordinador) event.getObject()).getDocumento().getTelefono().toUpperCase());
            cmbTipo.setValue(((Coordinador) event.getObject()).getTipo().toUpperCase());

            btnModificar.setDisabled(false);
            btnEliminar.setDisabled(false);
            btnCrear.setDisabled(true);
            passClave.setDisabled(true);
        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(CoordinadorVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }

    /**
     * @return the listaCoordinadores
     */
    public List<Coordinador> getListaCoordinadores() {

        if (listaCoordinadores == null) {
            try {
                listaCoordinadores = coordinadorLogica.consultar();
            } catch (Exception ex) {
                Logger.getLogger(CoordinadorVista.class.getName()).log(Level.SEVERE, null, ex);
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error: ", ex.getMessage()));
            }
        }

        return listaCoordinadores;
    }

    /**
     * @param listaCoordinadores the listaCoordinadores to set
     */
    public void setListaCoordinadores(List<Coordinador> listaCoordinadores) {
        this.listaCoordinadores = listaCoordinadores;
    }

    public InputText getTxtDocumento() {
        return txtDocumento;
    }

    public void setTxtDocumento(InputText txtDocumento) {
        this.txtDocumento = txtDocumento;
    }

    public InputText getTxtApellido() {
        return txtApellido;
    }

    public void setTxtApellido(InputText txtApellido) {
        this.txtApellido = txtApellido;
    }

    public InputText getTxtCorreo() {
        return txtCorreo;
    }

    public void setTxtCorreo(InputText txtCorreo) {
        this.txtCorreo = txtCorreo;
    }

    public InputText getTxtTelefono() {
        return txtTelefono;
    }

    public void setTxtTelefono(InputText txtTelefono) {
        this.txtTelefono = txtTelefono;
    }

    public InputText getTxtNombre() {
        return txtNombre;
    }

    public void setTxtNombre(InputText txtNombre) {
        this.txtNombre = txtNombre;
    }

    public SelectOneMenu getCmbTipo() {
        return cmbTipo;
    }

    public void setCmbTipo(SelectOneMenu cmbTipo) {
        this.cmbTipo = cmbTipo;
    }

    public Password getPassClave() {
        return passClave;
    }

    public void setPassClave(Password passClave) {
        this.passClave = passClave;
    }

    /**
     * @return the btnCrear
     */
    public CommandButton getBtnCrear() {
        return btnCrear;
    }

    /**
     * @param btnCrear the btnCrear to set
     */
    public void setBtnCrear(CommandButton btnCrear) {
        this.btnCrear = btnCrear;
    }

    /**
     * @return the btnModificar
     */
    public CommandButton getBtnModificar() {
        return btnModificar;
    }

    /**
     * @param btnModificar the btnModificar to set
     */
    public void setBtnModificar(CommandButton btnModificar) {
        this.btnModificar = btnModificar;
    }

    /**
     * @return the btnEliminar
     */
    public CommandButton getBtnEliminar() {
        return btnEliminar;
    }

    /**
     * @param btnEliminar the btnEliminar to set
     */
    public void setBtnEliminar(CommandButton btnEliminar) {
        this.btnEliminar = btnEliminar;
    }

    /**
     * @return the btnLimpiar
     */
    public CommandButton getBtnLimpiar() {
        return btnLimpiar;
    }

    /**
     * @param btnLimpiar the btnLimpiar to set
     */
    public void setBtnLimpiar(CommandButton btnLimpiar) {
        this.btnLimpiar = btnLimpiar;
    }

    //EVENTOS
    public void crear_action() {
        //System.out.println("Crear");

        if (usuariosLogica.validarSesion()) {
            try {
                Coordinador coordinador = new Coordinador();
                Long documento = Long.parseLong(txtDocumento.getValue().toString());
                Personal nuevoPersonal=new Personal();
                nuevoPersonal.setDocumento(documento);
                nuevoPersonal.setNombre(txtNombre.getValue().toString().toUpperCase());
                nuevoPersonal.setApellido(txtApellido.getValue().toString().toUpperCase());
                nuevoPersonal.setCorreo(txtCorreo.getValue().toString().toUpperCase());
                nuevoPersonal.setTelefono(txtTelefono.getValue().toString());
                if(!passClave.isDisabled())
                    nuevoPersonal.setClave(passClave.getValue().toString());
              
                String existePersonal = (String) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("existePersonal");
                if(existePersonal.equals("no"))
                   personalLogica.insertar(nuevoPersonal);
                
                coordinador.setDocumento(nuevoPersonal);
                coordinador.setTipo(cmbTipo.getValue().toString());

                coordinadorLogica.registrar(coordinador);
                //por si el usuario cambia algún dato del personal
                personalLogica.modificar(nuevoPersonal);

                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Mensaje: ","El Coordinador Se Registró Con Éxito"));
                
                limpiar_action();
            } catch (NumberFormatException nfe) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error: ", "El Documento Debe Ser Numérico!"));
            } catch (Exception e) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error: ", e.getMessage()));
            }

            listaCoordinadores = null;
        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(CoordinadorVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }

    public void modificar_action() {
        //System.out.println("Modificar");

        if (usuariosLogica.validarSesion()) {
            try {
                Coordinador coordinador = new Coordinador();
                Long documento = Long.parseLong(txtDocumento.getValue().toString());
                Personal miPersonal=new Personal();
                miPersonal.setDocumento(documento);
                miPersonal.setNombre(txtNombre.getValue().toString().toUpperCase());
                miPersonal.setApellido(txtApellido.getValue().toString().toUpperCase());
                miPersonal.setCorreo(txtCorreo.getValue().toString().toUpperCase());
                miPersonal.setTelefono(txtTelefono.getValue().toString());
                //miPersonal.setClave(passClave.getValue().toString());
                
                personalLogica.modificar(miPersonal);
                
                coordinador.setDocumento(miPersonal);
                coordinador.setTipo(cmbTipo.getValue().toString());

                coordinadorLogica.modificar(coordinador);                                

                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Mensaje: ","El Coordinador Se Modificó Con Éxito"));
                limpiar_action();
            } catch (NumberFormatException nfe) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error: ", "El Documento Debe Ser Numérico!"));
            } catch (Exception e) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error: ", e.getMessage()));
            }

            listaCoordinadores = null;
        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(CoordinadorVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    public void eliminar_action() {
        //System.out.println("Eliminar");

        if (usuariosLogica.validarSesion()) {
            try {

                Long documento = Long.parseLong(txtDocumento.getValue().toString());
                Personal miPersonal=new Personal();
                miPersonal.setDocumento(documento);                
                Coordinador coordinador = new Coordinador();
                coordinador.setDocumento(miPersonal);

                coordinadorLogica.eliminar(coordinador);

                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Mensaje: ","El Coordinador Se Eliminó Con Éxito"));
                limpiar_action();
            }catch (NumberFormatException nfe) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error: ", "El Documento Debe Ser Numérico!"));
            }  
            catch (Exception e) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error: ", e.getMessage()));
            }

            listaCoordinadores = null;
        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(CoordinadorVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }

    public void limpiar_action() {
        //System.out.println("Limpiar");

        if (usuariosLogica.validarSesion()) {
            txtDocumento.setValue("");
            txtNombre.setValue("");
            txtApellido.setValue("");
            txtCorreo.setValue("");
            txtTelefono.setValue("");
            passClave.setValue("");

            cmbTipo.setValue("-1");
            btnCrear.setDisabled(false);
            btnEliminar.setDisabled(true);
            btnModificar.setDisabled(true);
            
        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(CoordinadorVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    //listener: cuando se digita la identificacion y se hace tab consulta el coordinador si existe y trae sus
    //campos
    public void txtIdentificacion_listener() {
        //System.out.println("listener txtIdentificacion");

        if (usuariosLogica.validarSesion()) {
            Coordinador entityCoordinador = null;
            Personal entityPersonal=null;

            try {
                Long documento = Long.parseLong(txtDocumento.getValue().toString());
                entityPersonal=personalLogica.consultarPorId(documento);
                entityCoordinador = coordinadorLogica.consultarPorId(documento);
            }catch (NumberFormatException nfe) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error: ", "El Documento Debe Ser Numérico!"));
            }  
            catch (Exception ex) {
                Logger.getLogger(CoordinadorVista.class.getName()).log(Level.SEVERE, null, ex);
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error: ", ex.getMessage()));
            }
            
            //si el coordinador no existe limpia los campos y habilita el boton de crear y deshabilita modificar
            //y eliminar
            
            if(entityPersonal==null)    //si la persona no existe
            {
                btnModificar.setDisabled(true);
                btnEliminar.setDisabled(true);
                btnCrear.setDisabled(false);

                txtNombre.setValue("");
                txtApellido.setValue("");
                txtCorreo.setValue("");
                txtTelefono.setValue("");
                cmbTipo.setValue("-1");
                passClave.setDisabled(false); 
                
                FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("existePersonal", "no");
            }
            else if(entityCoordinador == null)    //si la persona existe pero no como coordinador
            {               
                txtNombre.setValue(entityPersonal.getNombre());
                txtApellido.setValue(entityPersonal.getApellido());
                txtCorreo.setValue(entityPersonal.getCorreo());
                txtTelefono.setValue(entityPersonal.getTelefono());
                passClave.setValue(entityPersonal.getClave());
                passClave.setDisabled(true);
                cmbTipo.setValue("-1");
                
                btnModificar.setDisabled(true);
                btnEliminar.setDisabled(true);
                btnCrear.setDisabled(false);
                //el personal ya existe por tanto guarda el estado en una variable de sesion
                FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("existePersonal", "si");
            }
            else //si ya existe como coordinador
            {                
                txtNombre.setValue(entityCoordinador.getDocumento().getNombre());
                txtApellido.setValue(entityCoordinador.getDocumento().getApellido());
                txtCorreo.setValue(entityCoordinador.getDocumento().getCorreo());
                txtTelefono.setValue(entityCoordinador.getDocumento().getTelefono());
                passClave.setValue(entityPersonal.getClave());
                passClave.setDisabled(true);
                cmbTipo.setValue(entityCoordinador.getTipo());

                btnModificar.setDisabled(false);
                btnEliminar.setDisabled(false);
                btnCrear.setDisabled(true);
                FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("existePersonal", "si");
            }           
            
        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(CoordinadorVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }
}
